package Collections类;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

/*
 *
 *  - public static <T> void sort(List<T> list，Comparator<? super T> ):将集合中元素按照指定规则排序。
 *   Comparator和comparable的区别
 *       Comparable：自己（this）和传进的参数进行对比，自己需要实现comparable接口，重写比较的规则compare方法
 *       Comparator:相当于找一个第三方的裁判，进行比较
 *
 *   Comparator的排序规则
 *       o1-o2:升序排序
 *       o2-o1：降序排序
 * */
public class CollectionsSort02 {
    public static void main(String[] args) {
        ArrayList<Integer> list01 = new ArrayList<>();
        Collections.addAll(list01, 1, 2, 4, 5, 6, 3);
        System.out.println(list01);
        Collections.sort(list01, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                //升序排列
                // return o1 - o2;

                //降序排列
                return o2 - o1;
            }
        });
        System.out.println(list01);


        //对自定义类型数据进行排列
        ArrayList<Person> list02 = new ArrayList<>();
        Person one = new Person("b张三", 12);
        Person two = new Person("a张三", 12);
        Person three = new Person("李四", 9);
        Person four = new Person("王武", 19);
        Collections.addAll(list02, one, two, three, four);
        System.out.println(list02);
        Collections.sort(list02, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                //代码可读性不高
                // return o1.getAges() - o2.getAges() == 0 ? o1.getName().charAt(0) - o2.getName().charAt(0) : o1.getAges() - o2.getAges();
                //按年龄进行升序排列
                //return o1.getAges()-o2.getAges();
                //现对年龄进行判断
                int i = o1.getAges() - o2.getAges();
                //如果年龄相同，判断首字母顺序
                if (i == 0) {
                    i = o1.getName().charAt(0) - o2.getName().charAt(0);
                }
                return i;
            }
        });
        // System.out.println("按年龄进行升序排序：" + list02);
        System.out.println("按年龄进行升序排序，如果重复，按字母顺序升序排列：" + list02);

    }


}
